package arithmetic2;


/**
 * Created by AJie on 2019/7/22
 * Function :
 * 给出两个 非空 的链表用来表示两个非负的整数。其中，它们各自的位数是按照 逆序 的方式存储的，并且它们的每个节点只能存储 一位 数字。
 *
 * 如果，我们将这两个数相加起来，则会返回一个新的链表来表示它们的和。
 *
 * 您可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 *
 * 示例：
 *
 * 输入：(2 -> 4 -> 3) + (5 -> 6 -> 4)
 * 输出：7 -> 0 -> 8
 * 原因：342 + 465 = 807
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/add-two-numbers
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class T_002_TwoNumAddListNode {
    public static void main(String[] args) {
        ListNode n1 = new ListNode(2);
        ListNode n2 = new ListNode(4);
        ListNode n3 = new ListNode(3);
        ListNode n4 = new ListNode(5);
        ListNode n5 = new ListNode(6);
        ListNode n6 = new ListNode(4);
        n1.next=n2;
        n2.next=n3;

        n4.next=n5;
        n5.next=n6;
        ListNode listNode = new T_002_TwoNumAddListNode().addTwoNumbers(n1, n4);
        printListNode(listNode);
    }

    private static void printListNode(ListNode listNode) {
        while (listNode!=null){
            System.out.println(listNode.val);
            listNode = listNode.next;
        }
    }

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode a=l1,b=l2,head ,currentNode;
        head =  currentNode = new ListNode(0);
        int currentRes = 0;
        int carry = 0;
        while (a!=null || b!=null){
            if (a != null) {
                currentRes +=a.val;
                a=a.next;
            }
            if (b != null) {
                currentRes +=b.val;
                b=b.next;
            }
            currentRes +=carry;
            carry=currentRes/10;
            currentRes=currentRes%10;
            ListNode listNode = new ListNode(currentRes);
            currentNode.next =listNode;
            currentNode = listNode;
            currentRes=0;
        }

        if (carry==1){
            currentNode.next = new ListNode(1);
        }
        return    head.next;
    }
}

